package com.dayaokeji.server_api.api;

import com.dayaokeji.server_api.Page;
import com.dayaokeji.server_api.ServerResponse;
import com.dayaokeji.server_api.domain.FileInfo;

import java.io.File;
import java.util.List;
import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
import retrofit2.http.Streaming;

/**
 * Created by Zeno on 2017/10/3.
 * 资源API
 */

public interface ResourceApi {

    /**
     * 上传文件
     * @param myfiles 文件
     * @param type 分类    1, 图片 2, PDF  3, EXCEL 4, WORD  9, 其他
     * @param description 资源描述
     * @param function 功能分类 {@link com.dayaokeji.server_api.utils.FileFunctionFlag}
     * @param relId 课堂id或者会议id
     * @param deleteOld  比如个人头像,只能存在一张,该值为true
     * @return
     */
    @Multipart
    @POST("course/resource/upload")
    Call<ServerResponse<List<Integer>>> upload(
            @Part MultipartBody.Part myfiles,
            @Part("type") RequestBody type,
            @Part("description") RequestBody description,
            @Part("function") RequestBody function,
            @Part("relId") RequestBody relId,
            @Part("deleteOld") RequestBody deleteOld
    );
    /**
     * 上传文件
     * @param myfiles 文件
     * @param type 分类    1, 图片 2, PDF  3, EXCEL 4, WORD  9, 其他
     * @param description 资源描述
     * @param function 功能分类 {@link com.dayaokeji.server_api.utils.FileFunctionFlag}
     * @param relId 课堂id或者会议id
     * @param deleteOld  比如个人头像,只能存在一张,该值为true
     * @return
     */
    @Multipart
    @POST("course/resource/upload")
    Call<ServerResponse<List<Integer>>> uploads(
            @Body MultipartBody myfiles,
            @Part("type") RequestBody type,
            @Part("description") RequestBody description,
            @Part("function") RequestBody function,
            @Part("relId") RequestBody relId,
            @Part("deleteOld") RequestBody deleteOld
    );

    @Multipart
    @POST("course/resource/uploadTemp")
    Call<ServerResponse<List<Integer>>> uploadTemp(
            @Part MultipartBody.Part myfiles
    );

    /**
     * 资源列表
     * @Param token
     * @param relId 课堂id或者会议id
     * @param relType 1:课堂 2:会议
     * @return
     */
    @GET("course/resource/list")
    Call<ServerResponse<Page<FileInfo>>> list(
            @Query("token") String token,
            @Query("relId") int relId,
            @Query("relType") int relType
    );

    /**
     * 下载文件
     * @param resourceId
     * @return
     */
    @Streaming
    @GET("course/resource/download")
    Call<ResponseBody> download(
            @Query("resourceId") String resourceId);

    /**
     * 删除文件
     * @param params 资源ID
     * @return
     */
    @POST("course/resource/delete")
    Call<ServerResponse<Void>> delete(@Body Map<String,String> params);

    /**
     * 查询资源
     * @param relId
     * @param relType
     * @param function
     * @return
     */
    @GET("course/resource/select")
    Call<ServerResponse<List<FileInfo>>> select(
            @Query("relId") Integer relId,
            @Query("relType") Integer relType,
            @Query("function") Integer function
    );

    /**
     * 查询资源
     * @param universityId
     * @param function
     * @return
     */
    @GET("course/resource/select")
    Call<ServerResponse<List<FileInfo>>> selectSlide(
            @Query("universityId") Long universityId,
            @Query("function") Integer function
    );

    /**
     * 查询资源
     * @param function
     * @return
     */
    @GET("course/resource/select")
    Call<ServerResponse<List<FileInfo>>> select(
            @Query("function") Integer function
    );

}
